var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');


// 导入config第三方全局配置模块
// config文件夹下新建default.json、development.json、production.json
// 在不同的环境下，使用不同的配置文件
const config=require('config')

// 导入mongodb连接数据库自定义模块
const mongodb=require('./mongodb.js');

/*导入morgan第三方模块*/
var logger = require('morgan');

// 导入express-session中间件，保持登录
const session=require('express-session');

// 导入dataformat第三方时间格式化模块
const dataFormat=require('dateformat');

// 导入art-template模板引擎
const template=require('art-template');

// var indexRouter = require('./routes/index');
// var usersRouter = require('./routes/users');
const adminRouter = require('./routes/admin/admin');
const HomeRouter = require('./routes/home/home');

var app = express();




/*告诉express框架模板所在的位置*/
app.set('views', path.join(__dirname, 'views'));
// 告诉express框架模板的默认后缀是什么
/*app.set('view engine', 'ejs');*/
app.set('view engine', 'art');
// 当渲染后缀为art的模板时，所使用的模板引擎是什么
app.engine('art',require('express-art-template'))
// 向模板引擎内部导入dataFormat变量
template.defaults.imports.dataFormat=dataFormat

// 开放静态资源目录 访问该资源可以省略public
app.use(express.static(path.join(__dirname, 'public')));


/*打印日志*/
app.use(logger('dev'));
app.use(express.json());

/*处理post请求参数*/
app.use(express.urlencoded({ extended: false }));

app.use(cookieParser());

// 配置session
app.use(session({
  resave:false,//添加这行
  saveUninitialized: false,//添加没有初始化的cookie
  secret:"secret key",
  cookie: {maxAge: 1000 * 60 * 60 * 24 * 2},//30 days
}));



// 拦截请求，判断用户登录状态，必须写在user路由之前
app.use('/admin',require('./middleware'))
// app.use('/admin',(req,res,next)=>{
//   // 判断用户访问的是否是登录页面:如果不是，则重定向到登录页面
//   // 判断用户的登录状态：如果是登录，则放行
//   if(req.url!='/login' && !req.session.username){
//     res.redirect('/admin/login')
//   } else {
//     next()
//   }
// })


// app.use('/', indexRouter);
// app.use('/users', usersRouter);

app.use('/admin', adminRouter);
app.use('/home',HomeRouter);

// catch 404 and forward to error.art handler
app.use(function(req, res, next) {
  if(req.url='/admin'){
      res.redirect('/admin/login')
  } else {
    next(createError(404));
  }
});

// 获取系统环境变量，需要事先配置环境变量NODE_ENV：development/production
// if(process.env.NODE_ENV=='development'){
//   // 开发环境 development
//   console.log('开发环境');
//   // 将客户端发送到客户端的请求信息打印到控制台中
//   app.use(logger('dev'));
// }else {
//   // 线上环境 production
//   console.log('生产环境');
// }
// 使用config第三方全局配置模块获取配置，不需要使用上面的方式，config会自动识别
console.log(config.get('title'));


// error.art handler
app.use(function(err, req, res, next) {
  // set locals, only providing error.art in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
  console.log(req.app.get('env'));
  // render the error.art page
  res.status(err.status || 500);
  res.render('error');
});

// 错误处理
app.use(function (err, req, res, next) {
  console.log(err);
  if(!err) return false
  const result=JSON.parse(err)
  // res.redirect(`${result.path}?message=${result.message}&id=${result.id}`)
  let params=""
  for (let attr in result){
    if(attr!='path'){
      params+='&'+attr+'='+result[attr]
    }
  }
  // console.log(params);
  res.redirect(`${result.path}?${params}`)
})

module.exports = app;
